using System.Collections.Generic;

namespace WenYu.Core.Errors
{
    /// <summary>
    /// 编译错误信息 - 支持8段式错误提示
    /// 
    /// 8段式结构：
    /// 1. 错误标题 - 简明扼要的错误描述
    /// 2. 错误位置 - 精确的行号列号
    /// 3. 源代码 - 显示错误上下文
    /// 4. 错误指示 - 用波浪线标记错误位置
    /// 5. 问题解释 - 详细说明为什么错了
    /// 6. 解决建议 - 提供2-3个可行的修复方案
    /// 7. 相关知识 - 链接到相关文档或示例
    /// 8. 更多帮助 - 提供进一步学习资源
    /// </summary>
    public class CompileError
    {
        /// <summary>
        /// 错误代码（如：S001, E001, L001）
        /// </summary>
        public string ErrorCode { get; set; } = "";
        
        /// <summary>
        /// 1️⃣ 错误标题 - 简短的错误描述
        /// </summary>
        public string Title { get; set; } = "";
        
        /// <summary>
        /// 错误严重程度
        /// </summary>
        public ErrorSeverity Severity { get; set; } = ErrorSeverity.Error;
        
        /// <summary>
        /// 2️⃣ 错误位置 - 行号
        /// </summary>
        public int Line { get; set; }
        
        /// <summary>
        /// 2️⃣ 错误位置 - 列号
        /// </summary>
        public int Column { get; set; }
        
        /// <summary>
        /// 2️⃣ 文件路径
        /// </summary>
        public string FilePath { get; set; } = "";
        
        /// <summary>
        /// 3️⃣ 源代码（完整的源代码文本，用于提取上下文）
        /// </summary>
        public string SourceCode { get; set; } = "";
        
        /// <summary>
        /// 3️⃣ 错误位置前显示的行数
        /// </summary>
        public int ContextLinesBefore { get; set; } = 1;
        
        /// <summary>
        /// 3️⃣ 错误位置后显示的行数
        /// </summary>
        public int ContextLinesAfter { get; set; } = 1;
        
        /// <summary>
        /// 4️⃣ 错误标记长度（用于波浪线显示）
        /// </summary>
        public int ErrorLength { get; set; } = 1;
        
        /// <summary>
        /// 5️⃣ 问题解释 - 详细说明为什么错了
        /// </summary>
        public string Explanation { get; set; } = "";
        
        /// <summary>
        /// 6️⃣ 解决建议 - 列表形式的修复方案
        /// </summary>
        public List<string> Suggestions { get; set; } = new();
        
        /// <summary>
        /// 7️⃣ 相关知识 - 学习资源链接或说明
        /// </summary>
        public List<string> RelatedKnowledge { get; set; } = new();
        
        /// <summary>
        /// 7️⃣ 相关知识链接 - 可点击的URL链接（与 RelatedKnowledge 一一对应）
        /// </summary>
        public List<string> RelatedKnowledgeUrls { get; set; } = new();
        
        /// <summary>
        /// 8️⃣ 更多帮助 - 额外的学习资源或提示
        /// </summary>
        public List<string> MoreHelp { get; set; } = new();
        
        /// <summary>
        /// 8️⃣ 更多帮助链接 - 可点击的URL链接（与 MoreHelp 一一对应）
        /// </summary>
        public List<string> MoreHelpUrls { get; set; } = new();
        
        /// <summary>
        /// 可用的相关信息（如：已定义的变量列表，用于智能建议）
        /// </summary>
        public Dictionary<string, object> Context { get; set; } = new();
    }
    
    /// <summary>
    /// 错误严重程度
    /// </summary>
    public enum ErrorSeverity
    {
        /// <summary>错误 - 无法编译</summary>
        Error,
        
        /// <summary>警告 - 可能有问题</summary>
        Warning,
        
        /// <summary>提示 - 可改进</summary>
        Info,
        
        /// <summary>学习提示 - 教学信息</summary>
        Hint
    }
}

